package org.ytor.core.sqlflow.executor;

import java.util.List;

/**
 * created by yangtong on 2025/8/8 18:17:37
 * <br/>
 * SQL执行器
 */
public interface SqlExecutor {

    /**
     * 查询列表
     *
     * @param sql SQL查询语句
     * @param params 查询参数
     * @return 查询结果
     */
    DQLResult doQuery(String sql, List<Object> params);

    /**
     * 新增数据
     *
     * @param sql INSERT语句
     * @param params 插入参数
     * @return 插入结果，包含影响行数和生成的主键
     */
    DMLResult doInsert(String sql, List<Object> params);

    /**
     * 批量新增数据
     *
     * @param sql INSERT语句
     * @param params 批量参数，每个元素是一行数据的参数列表
     * @return 批量插入结果，包含总影响行数
     */
    List<DMLResult> doInsertBatch(String sql, List<List<Object>> params);

    /**
     * 删除数据
     *
     * @param sql DELETE语句
     * @param params 删除条件参数
     * @return 删除结果，包含影响行数
     */
    DMLResult doDelete(String sql, List<Object> params);

    /**
     * 修改数据
     *
     * @param sql UPDATE语句
     * @param params 更新参数
     * @return 更新结果，包含影响行数
     */
    DMLResult doUpdate(String sql, List<Object> params);

    /**
     * 执行DDL操作
     *
     * @param sql DDL语句
     * @param params 更新参数
     * @return 更新结果，包含影响行数
     */
    DMLResult doDDL(String sql, List<Object> params);
}